package com.wechat.page.api;

import java.util.List;
import java.util.concurrent.CompletableFuture;

import org.springframework.stereotype.Service;

import com.swak.annotation.FluxDepend;
import com.swak.entity.YesNo;
import com.swak.utils.Lambdas;
import com.wechat.dto.ContactDTO;
import com.wechat.dto.ContactFindDTO;
import com.wechat.service.ContactServiceAsync;

/**
 * 联系人服务聚合
 * 
 * @author 618lf
 */
@Service
public class ContactApi {

	@FluxDepend
	private ContactServiceAsync contactService;

	/**
	 * 查看好友
	 * 
	 * @return
	 */
	public CompletableFuture<ContactDTO> get(String id) {
		return this.contactService.get(id);
	}

	/**
	 * 查询好友列表
	 * 
	 * @return
	 */
	public CompletableFuture<List<ContactDTO>> friends(ContactFindDTO find) {
		return this.contactService.friends(find == null ? new ContactFindDTO() : find);
	}

	/**
	 * 查询好友申请列表 -- 只显示最近30天的好友申请记录
	 * 
	 * @return
	 */
	public CompletableFuture<List<ContactDTO>> friendAdds(ContactFindDTO find) {
		return this.contactService.friendAdds(find == null ? new ContactFindDTO() : find);
	}
	
	/**
	 * 添加好友
	 * 
	 * @param contact
	 * @return
	 */
	public CompletableFuture<ContactDTO> addFriends(List<ContactDTO> contacts) {
		return this.contactService.create(Lambdas.each(contacts, contact -> contact.setIsFriend(YesNo.Yes.getType())));
	}

	/**
	 * 添加好友
	 * 
	 * @param contact
	 * @return
	 */
	public CompletableFuture<ContactDTO> addFriend(ContactDTO contact) {
		return this.contactService.create(contact.setIsFriend(YesNo.Yes.getType()));
	}

	/**
	 * 批量查询联系人, 不会过滤是否好友;
	 * 
	 * @return
	 */
	public CompletableFuture<List<ContactDTO>> contacts(List<String> ids) {
		return this.contactService.contacts(ids);
	}

	/**
	 * 保存备注名: 返回最新的数据
	 * 
	 * @return
	 */
	public CompletableFuture<ContactDTO> saveAlias(ContactDTO contact) {
		return this.contactService.saveAlias(contact);
	}

	/**
	 * 保存描述: 返回最新的数据
	 * 
	 * @return
	 */
	public CompletableFuture<ContactDTO> saveRemarks(ContactDTO contact) {
		return this.contactService.saveRemarks(contact);
	}

	/**
	 * 保存昵称: 返回最新的数据
	 * 
	 * @return
	 */
	public CompletableFuture<ContactDTO> saveNickName(ContactDTO contact) {
		return this.contactService.saveNickName(contact);
	}
}
